<?php
//中文字符串截取方法
//base_convert(3,10,2);在任意进制之间转换数字[这是把十进制的3转换成二进制数表示]（输出11）
//ord();返回字符的 ASCII 码值[该函数是 chr() 的互补函数。 ]
function substr_utf8($str,$start,$lenth){
	$len=strlen($str);
	$r=array();
	$n=0;
	$m=0;
	for($i=0;$i<$len;$i++){
		$x=substr($str, $i,1);
		$a=base_convert(ord($x), 10, 2);
		$a=substr('00000000'.$a, -8);
		if($n<$start){
			if(substr($a, 0,1)==0){
				
			}elseif(substr($a, 0,3)==110){
				$i+=1;
			}elseif(substr($a, 0,4)==1110){
				$i+=2;
			}
			$n++;
		}else{
			if(substr($a, 0,1)==0){
				$r[]=substr($str, $i,1);
			}elseif(substr($a, 0,3)==110){
				$r[]=substr($str, $i,2);
				$i+=1;
			}elseif(substr($a, 0,4)==1110){
				$r[]=substr($str,$i,3);
				$i+=2;
			}else{
				$r[]="";
			}
			if(++$m>=$lenth){
				break;
			}
		}
	}
	return join($r);
}
$a="中s文字符串ab截12取（php）";
$q=substr_utf8($a, 0, 3);//从0开始，截取3个字符
echo $q;
?>